import { BrowserWindow } from 'electron'
import Store from './store'
import { delWindow, getWindow, saveWindow } from './windowProxy'
import { join } from 'path'
import { is } from '@electron-toolkit/utils'
import icon from '../../resources/sweetcircle-ico.png?asset'
import wsClient from './wsClient'
const NODE_ENV = process.env.NODE_ENV


const loginWinWidth = 300
const loginWinHeight = 400
const registerWinWidth = 300
const registerWinHeight = 500
const restPasswordWinWidth = 300
const restPasswordWinHeight = 450
const mainWinWidth = 900
const mainWinHeight = 700
/**
 * 登录成功
 *
 * 该函数用于处理登录成功的操作，如设置窗口大小、居中显示等。
 * 主要目的是为了提供登录成功的操作功能，如设置窗口大小、居中显示等。
 *
 * @param {IpcMainEvent} event - 窗口对象
 * @param {BrowserWindow} mainWindow - 窗口对象
 * @param {{
 *   userId:string,
 *   admin:string,
 *   nickname:string,
 *   avatar:string,
 *   areaCode:string,
 *   areaName:string,
 *   contactStatus:string,
 *   email:string,
 *   joinType:number,
 *   nickName:string,
 *   personalSignature:string,
 *   sex:number,
 *   token:string,
 *   userSweetCircleId:string,}} data - 登录成功后的用户信息
 */
const loginSuccess = (event,mainWindow, data) => {
  mainWindow.setResizable(true)
  mainWindow.setSize(mainWinWidth, mainWinHeight)
  mainWindow.center()
  mainWindow.setMinimumSize(700, 500)
  Store.setData(data.userId, data)
  Store.setUserId(data.userId)

  // TODO 增加用户配置
  if (data.admin) {

  }

  // TODO 初始化ws 连接
  wsClient.initWs({ token:data.token }, event.sender)

}


/**
 * 窗口标题栏操作
 *
 * 该函数用于处理窗口标题栏的操作，如关闭、最小化、最大化等。
 * 主要目的是为了提供窗口标题栏的操作功能，如窗口的关闭、最小化、最大化等。
 *
 * @param {BrowserWindow} win - 窗口对象
 * @param {string} action - 操作类型，如'close'、'minimize'、'maximize'等
 * @param {Object} data - 操作数据，如窗口是否最大化等
 */
const winTitleOp = (win, action, data) => {
  switch (action) {
    case 'close':
      if (data.closeType === 0) {
        win.close()
      } else {
        win.setSkipTaskbar(true) // 使窗口不显示在任务栏中
        win.hide()
      }
      break
    case 'minimize':
      win.minimize()
      break
    case 'maximize':
      win.maximize()
      break
    case 'unmaximize':

      win.setFullScreen(false)
      win.center()

      // win.setSize(maa, 600)
      // win.center()
      break
    case 'top':
      win.setAlwaysOnTop(data.top)
      break
  }

}

/**
 * 切换窗口大小
 *
 * 该函数用于切换窗口的大小，如登录窗口、注册窗口、重置密码窗口等。
 * 主要目的是为了提供窗口的切换功能，如登录窗口、注册窗口、重置密码窗口等。
 *
 * @param {BrowserWindow} mainWindow - 窗口对象
 * @param {boolean} isLogin - 是否是登录窗口
 */
const switchWindow = (mainWindow, isLogin) => {
  mainWindow.setResizable(true)
  if (isLogin == 0) {
    mainWindow.setSize(loginWinWidth, loginWinHeight)
  } else if (isLogin == 1) {
    mainWindow.setSize(registerWinWidth, registerWinHeight)
  } else if (isLogin == 2) {
    mainWindow.setSize(restPasswordWinWidth, restPasswordWinHeight)
  }
  mainWindow.setResizable(false)
}

const openWindow = ({ windowId, title, weight, height, path, callback }) => {
  let win = getWindow(windowId)
  if (!win) {
    win = new BrowserWindow({
      icon: icon,
      width: weight,
      height: height,
      autoHideMenuBar: true,
      resizable: false,
      titleBarStyle: 'hidden',
      frame: true,
      transparent: true,
      hasShadow: false,
      backgroundColor: '#ffffff',
      webPreferences: {
        preload: join(__dirname, '../preload/index.js'),
        sandbox: false,
        contextIsolation: false
      }
    })
    saveWindow(windowId, win)
    if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
      // newWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + "#" + path)
      win.loadURL(`${process.env['ELECTRON_RENDERER_URL']}/index.html#${path}`)
    } else {
      win.loadFile(join(__dirname, `../renderer/index.html`), { hash: `${path}` })
    }
    //打开调试窗口
    if (NODE_ENV === 'development') {
      win.webContents.openDevTools()
    }
    win.on('ready-to-show', () => {
      win.setTitle(title)
      win.show()
    })

    win.once('show', () => {
      callback()
    })
    win.on('closed', () => {
      delWindow(windowId)
    })
  } else {
    win.show()
    win.setSkipTaskbar(false)
    callback()
  }
}
/**
 * 更新用户信息
 */
const updateUserInfo = () => {
  const win = getWindow('main')  // 获取 main 主窗口
  win.webContents.send('updateUserInfo', { avatar: true })
  getWindow('setting').close()
}

/**
 * 退出登录
 *
 * 该函数用于退出登录，并重置窗口大小。
 * 主要目的是为了提供退出登录的功能，并重置窗口大小。
 *
 * @param {BrowserWindow} mainWindow - 窗口对象
 * @param {string} userId - 用户信息
 */
const loginOut = (mainWindow,userId) => {
  mainWindow.setResizable(true)
  mainWindow.setMinimumSize(loginWinWidth, loginWinHeight)
  mainWindow.setSize(loginWinWidth, loginWinHeight)
  mainWindow.center()
  mainWindow.setResizable(false)
}


export default {
  loginSuccess,
  switchWindow,
  winTitleOp,
  openWindow,
  updateUserInfo,
  loginOut,
}
